// File:    Item.cs
// Author:  Marcelo
// Created: jueves, 05 de abril de 2012 21:04:34
// Purpose: Definition of Class Item

using System;
using System.Collections;
using System.Configuration;
using Castle.ActiveRecord;
using System.Collections.Generic;

namespace EYDIngenieria.ERP.ObjetosDeNegocio.Dominio
{
    [ActiveRecord]
    public class Producto : ActiveRecordBase<Producto>
    {
        private int id;
        private UnidadDeMedida unidadDeMedida;
        private FamiliaProducto familiaProducto;
        private IList<Proveedor> proveedores;
        private string codigo;
        private string codigoDeBarras;
        private string descripcion;
        private double stockMinimo;
        private double stockMaximo;
        private string nombre;
        private double stock;
        private string color;
        private String marca;
        private Boolean activo;

        [Property]
        public Boolean Activo
        {
            get { return activo; }
            set { activo = value; }
        }
        [Property]
        public String Marca
        {
            get { return marca; }
            set { marca = value; }
        }
        [Property]
        public string Color
        {
            get {
                if (stockMinimo == 0 || StockMaximo == 0)
                {
                    color = Convert.ToString(ConfigurationSettings.AppSettings["r"]);
                    return Convert.ToString(ConfigurationSettings.AppSettings["r"]);
                }
                color = Convert.ToString(ConfigurationSettings.AppSettings["v"]);
                if (stock <= stockMinimo)
                {
                    color = Convert.ToString(ConfigurationSettings.AppSettings["r"]);
                }
                else if (stock > stockMinimo && stock < (StockMaximo-stockMinimo)/3)
                {
                    color = Convert.ToString(ConfigurationSettings.AppSettings["a"]);
                }
                else if (stock > stockMaximo)
                {
                    color = Convert.ToString(ConfigurationSettings.AppSettings["o"]);
                }

            return color; }
            set { color = value; }
        }

        [Property]
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
       
        public Producto(int id,string nombre,UnidadDeMedida unidadDeMedida,FamiliaProducto familiaProducto,IList<Proveedor> proveedores,string codigo,string codigoDeBarras,string descripcion,double stockMinimo,double stockMaximo,string marca)
        {
            this.id = id;
            this.nombre = nombre;
            this.familiaProducto = familiaProducto;
            this.unidadDeMedida = unidadDeMedida;
            this.proveedores = proveedores;
            this.codigo = codigo;
            this.codigoDeBarras = codigoDeBarras;
            this.descripcion = descripcion;
            this.stockMinimo = stockMinimo;
            this.stockMaximo = stockMaximo;
            this.marca = marca;
        }
        public Producto():this(0,string.Empty,new UnidadDeMedida(),new FamiliaProducto(),new List<Proveedor>(),string.Empty,string.Empty,string.Empty,0,0 ,string.Empty )
        {
        }

        [Property]
        public double StockMaximo
        {
            get { return stockMaximo; }
            set { stockMaximo = value; }
        }

        [Property]
        public double Stock
        {
            get { return stock; }
            set { stock = value; }
        }

        [Property]
        public double StockMinimo
        {
            get { return stockMinimo; }
            set { stockMinimo = value; }
        }

        [Property]
        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        [Property]
        public string CodigoDeBarras
        {
            get { return codigoDeBarras; }
            set { codigoDeBarras = value; }
        }

        [Property]
        public string Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        
        [BelongsTo("IdFamilia")]
        public FamiliaProducto Familia
        {
            get { return familiaProducto; }
            set { familiaProducto = value; }
        }

        [BelongsTo("IdUnidadDeMedida")]
        public UnidadDeMedida UnidadDeMedida
        {
            get { return unidadDeMedida; }
            set { unidadDeMedida = value; }
        }

        [PrimaryKey]
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        [HasAndBelongsToMany(typeof (Proveedor), Table = "ProductoProveedor", ColumnKey = "IdProducto", ColumnRef = "IdProveedor")]
        public System.Collections.Generic.IList<Proveedor> Proveedores
        {
            get
            {
               
                return proveedores;
            }
            set
            {
                proveedores = value;
            }
        }

        /// <summary>
        /// Add a new Proveedor in the collection
        /// </summary>
        /// <pdGenerated>Default Add</pdGenerated>
        public void AddProveedores(Proveedor newProveedor)
        {
            if (newProveedor == null)
                return;
            if (this.proveedores == null)
                this.proveedores = new System.Collections.Generic.List<Proveedor>();
            if (!this.proveedores.Contains(newProveedor))
                this.proveedores.Add(newProveedor);
        }

        /// <summary>
        /// Remove an existing Proveedor from the collection
        /// </summary>
        /// <pdGenerated>Default Remove</pdGenerated>
        public void RemoveProveedores(Proveedor oldProveedor)
        {
            if (oldProveedor == null)
                return;
            if (this.proveedores != null)
                if (this.proveedores.Contains(oldProveedor))
                    this.proveedores.Remove(oldProveedor);
        }

        /// <summary>
        /// Remove all instances of Proveedor from the collection
        /// </summary>
        /// <pdGenerated>Default removeAll</pdGenerated>
        public void RemoveAllProveedores()
        {
            if (proveedores != null)
                proveedores.Clear();
        }
       

    }
}